package com.py.credit.service;

import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletResponse;

import com.py.credit.entity.Column;
import com.py.credit.entity.DataResult;
import com.py.credit.entity.Dept;
import com.py.credit.entity.StatisticsResult;
import com.py.credit.entity.SysUser;
import com.py.credit.entity.Table;
import com.py.credit.entity.common.InspectRule;
import com.py.credit.entity.common.OptionalColumn;
import com.py.framework.core.common.Page;

public interface TableService {

    public List<Map<String, Object>> getByConditionForPage(String kId, String deptId, String type,
                                                           List<String> showColumns, String[] additionalColumns, String condition, Page page);

    public Table queryCubeById(int tableId);

    int getTableIdByResource(String resourceId);

    public void addTableInfo(String kId, String deptId, Table table, List<Column> columns);

    public void updateTable(String kId, String deptId, Table table, List<Column> addColumns, List<Column> updateColumns,
                            List<Column> delColumns);

    public Map<String, Object> getTableInfo(String kId, String deptId, int tableId);

    void addTable(Table table);

    public void updateTable(Table table);

    public List<Map<String, Object>> getSharingResouceByConditionForPage(String kId, String deptId,
                                                                         List<String> showColumns, String[] additionalColumns, String condition, Page page);

    public int getAndSetMaxSerialNumberByDeptId(long i);

    public List<DataResult> getData(String tableName, List<Column> columns, String tybm);

    public List<Map<String, Object>> getRecordsByConditionForPage(List<String>recordIds,String tableName, String deptId, List<String> showColumns,
                                                                  String[] additionalColumns, String condition, Page page);

    public List<Map<String, Object>> getRecordsForXypjForPage(String tybm, String tableName, List<String> showColumns,
                                                              String[] additionalColumns, String condition, Page page);

    public List<Map<String, Object>> getTableList(String rootId);

    public void del(String tableIds, String type, String kId, String deptId);

    /**
     * @param metricId
     * @param tableId
     * @return
     */
    boolean duplicateExist(String metricCode, Integer tableId);

    /**
     * @param tableId
     * @return
     */
    public Table getTableById(int tableId);

    /**
     * @param kId
     * @param deptId
     * @param tableId
     * @return
     */
    public Map<String, Object> getSharingTableInfo(String kId, String deptId, int tableId);

    public List<Dept> getAlreadyDistributeRecord(int tableId, String kId);

    /**
     * @param kId
     * @param tableId
     * @param depts
     */
    public void distributeCommonResource(String kId, int tableId, List<Map<String, String>> depts);

    public List<Map<String, Object>> getTableList(String kId, String deptId, String sharingContentType);

    /**
     * @param repeatCheck 是否验重 Y:是 N:否
     * @param userInfo    用户信息实体
     * @param id          表ID
     * @Function 更新重复校验字段状态
     * @FileName TableServcie.java
     * @MethodName updateRepeatCheck
     * @Date 2018年9月10日 下午3:48:31
     * @Author Min DongXv
     */
    void updateRepeatCheck(String repeatCheck, SysUser userInfo, Integer id);

    public int getByResourceId(String resourceId);

    List<LinkedHashMap> selectTableInfo(List<Integer> ids, Integer rootId);

    public List<Table> getResources(String kId, String deptId, String name);

	public List<InspectRule> getResourceColumnRules(Integer version, String tableId, String ruleName, Page page);

	public List<InspectRule> getResourceTableRules(Integer version, String tableId, String ruleName, Page page);

    /**
     * 功能描述: 异议处理查询待审核的数据
     *
     * @param tybm              企业统一编码
     * @param tyshxydm          企业统一社会信用代码
     * @param tableId           表id
     * @param tableName         表名
     * @param showColumns       展示列
     * @param additionalColumns 新增的查询列
     * @param condition         高级查询
     * @param page              分页
     * @return List
     * @author YaoS
     * @date 19/1/25 18:12
     */
    List<Map<String, Object>> getRecordsForPage(String tybm, String tyshxydm, String tableId, String tableName, List<String> showColumns,
                                                String[] additionalColumns, String condition, Page page);

	public List<StatisticsResult> getStatistics(String startTime, String endTime, List<String> deptId, List<String> tableId);

	public List<Map<String, String>> getTableListForSearch(List<String> deptId);

	public void exportStatistics(String startTime, String endTime, List<StatisticsResult> data,
			HttpServletResponse response);

	public void getTableDatas(String startTime, String endTime, String deptId, String tableId, HttpServletResponse response);

	
	/**
	 * @param endTime 
	 * @param startTime 
	 * @param showColumns 
	 * @param showColumns 
	 * @Title: exportSgsTotal
	 * @Description: TODO(这里用一句话描述这个方法的作用)
	 * @param @param condition
	 * @param @param type
	 * @param @param deptId
	 * @param @param response    设定文件
	 * @return void    返回类型
	 * @throws
	*/
	
	public  List<Map<String,Object>> getSgsTotalByConditionForPage( List<String> showColumns, String condition, String type, List<String> deptId  , HttpServletResponse response, 
			String startTime, String endTime,Page page,String jdrqStart,String jdrqEnd);

	

	
	/**
	 * @Title: getSgsDept
	 * @Description: TODO(这里用一句话描述这个方法的作用)
	 * @param @param type
	 * @param @return    设定文件
	 * @return List<Map<String,Object>>    返回类型
	 * @throws
	*/
	
	public List<Map<String, Object>> getSgsDept(String type);

	
	
	/**
	 * @param deptId 
	 * @Title: getListByTableIdForPage
	 * @Description: TODO(这里用一句话描述这个方法的作用)
	 * @param @param tableId
	 * @param @param page
	 * @param @return    设定文件
	 * @return List<Map<String,Object>>    返回类型
	 * @throws
	*/
	
	public List<Map<String, Object>> getListByTableIdForPage(String xmmc,String tableId, List<String> deptId, Page page);

	
	/**
	 * @Title: getDeptByTableId
	 * @Description: TODO(这里用一句话描述这个方法的作用)
	 * @param @param tableId
	 * @param @return    设定文件
	 * @return List<Map<String,Object>>    返回类型
	 * @throws
	*/
	
	public List<Map<String, Object>> getDeptByTableId(String tableId);

	
	
	/**
	 * @Title: getSgsDataListByConditionForPage
	 * @Description: TODO(这里用一句话描述这个方法的作用)
	 * @param @param showColumns
	 * @param @param strings
	 * @param @param condition
	 * @param @param page
	 * @param @param tableId
	 * @param @param deptId
	 * @param @return    设定文件
	 * @return List<Map<String,Object>>    返回类型
	 * @throws
	*/
	
	public List<Map<String, Object>> getSgsDataListByConditionForPage(List<String>  recordIds,List<String> showColumns, String[] strings,
			String condition, Page page, String type, List<String> deptId,String startTime,String endTime,
			String jdrqStart,String jdrqEnd);

	
	/**
	 * @Title: getDataByTableIdForPage
	 * @Description: TODO(这里用一句话描述这个方法的作用)
	 * @param @param xmmc
	 * @param @param xzxdrlb
	 * @param @param sxyj
	 * @param @param tableId
	 * @param @param deptId
	 * @param @param page
	 * @param @return    设定文件
	 * @return List<Map<String,Object>>    返回类型
	 * @throws
	*/
	
	public List<Map<String, Object>> getDataByTableIdForPage(String xmmc, String xzxdrlb, String sxyj, String tableId,
			List<String> deptId, Page page);

	
	/**
	 * @Title: getOtherTotalByTableIdForPage
	 * @Description: TODO(这里用一句话描述这个方法的作用)
	 * @param @param tableId
	 * @param @param condition
	 * @param @param page
	 * @param @return    设定文件
	 * @return List<Map<String,Object>>    返回类型
	 * @throws
	*/
	
	public List<Map<String, Object>> getOtherTotalByTableIdForPage(String tableId, String condition, Page page);

	
	/**
	 * @Title: getSgsDataListByCondition
	 * @Description: TODO(这里用一句话描述这个方法的作用)
	 * @param @param recordIds
	 * @param @param columns
	 * @param @param strings
	 * @param @param condition
	 * @param @param page
	 * @param @param type
	 * @param @param deptId
	 * @param @param startTime
	 * @param @param endTime
	 * @param @return    设定文件
	 * @return List<Map<String,Object>>    返回类型
	 * @throws
	*/
	
	public List<Map<String, Object>> getSgsDataListByCondition(List<String> recordIds, List<String> columns,
			String[] strings, String condition, String type, List<String> deptId, String startTime,
			String endTime,String jdrqStart,String jdrqEnd);

	
	/**
	 * @Title: getSgstzListForPage
	 * @Description: TODO(这里用一句话描述这个方法的作用)
	 * @param @param page
	 * @param @param type
	 * @param @param deptId
	 * @param @param startTime
	 * @param @param endTime
	 * @param @param jdrqStart
	 * @param @param jdrqEnd
	 * @param @param wsh
	 * @param @param xzxdrmc
	 * @param @return    设定文件
	 * @return List<Map<String,Object>>    返回类型
	 * @throws
	*/
	
	public List<Map<String, Object>> getSgstzListForPage(Page page, String type, List<String> deptId, String startTime,
			String endTime, String jdrqStart, String jdrqEnd, String wsh, String xzxdrmc,List<String> recordIds);

	
	/**
	 * @Title: getSgsCblListForPage
	 * @Description: TODO(这里用一句话描述这个方法的作用)
	 * @param @param page
	 * @param @param type
	 * @param @param deptId
	 * @param @param startTime
	 * @param @param endTime
	 * @param @return    设定文件
	 * @return List<Map<String,Object>>    返回类型
	 * @throws
	*/
	
	public List<Map<String, Object>> getSgsCblListForPage(Page page, String type, List<String> deptId, String startTime,
			String endTime);

	
	/**
	 * @Title: getSgstzList
	 * @Description: TODO(这里用一句话描述这个方法的作用)
	 * @param @param page
	 * @param @param type
	 * @param @param deptId
	 * @param @param startTime
	 * @param @param endTime
	 * @param @param jdrqStart
	 * @param @param jdrqEnd
	 * @param @param wsh
	 * @param @param xzxdrmc
	 * @param @param recordIds
	 * @param @return    设定文件
	 * @return List<Map<String,Object>>    返回类型
	 * @throws
	*/
	
	public List<Map<String, Object>> getSgstzList(Page page, String type, List<String> deptId, String startTime,
			String endTime, String jdrqStart, String jdrqEnd, String wsh, String xzxdrmc, List<String> recordIds);

	public List<Map<String, Object>> getLyTableListByConditionForPage(String kId, String deptId, String type,
            List<String> showColumns, String[] additionalColumns, String condition, Page page);

	
	
}
